#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iostream>
#include <vector>
#define lld long long // long long 的 printf 占位符是 lld
#define ENDL '\n'     // 将 endl 替换为 \n 取消缓冲区
#define mod %
using std::cin;
using std::cout;
using std::vector;

const lld MOD_N = 1e9 + 7;
// 取模加法 (a + b) % MOD_N
lld mod_add(lld a, lld b) { return (a mod MOD_N + b mod MOD_N) mod MOD_N; }
// 取模乘法 (a * b) % MOD_N
lld mod_mul(lld a, lld b) { return (a mod MOD_N * b mod MOD_N) mod MOD_N; }
lld sum = 0;
void LOG(lld x) {
  printf("x = %lld ", x);
  printf("\n");
}
//@TODO void写法
/*
void dfs(const vector<lld> s, lld &res) {
  //
  if (s.size() == 1) {
    res = s[0] mod MOD_N;
    return;
  }

  lld size_ = s.size() / 2;

  if (s.size() % 2 == 0) {
    vector<lld> s1(s.begin(), s.begin() + size_);
    vector<lld> s2(s.begin() + size_, s.end());
    lld L, R;
    dfs(s1, L);
    dfs(s2, R);
    res = mod_mul(L, R); // 计算结果存入 res

  }

  else {
    vector<lld> s1(s.begin(), s.begin() + size_);
    vector<lld> s2(s.begin() + size_ + 1, s.end());
    lld mid = s[size_] mod MOD_N;
    lld L, R;
    dfs(s1, L);
    dfs(s2, R);
    lld LR = mod_mul(std::abs(mod_add(L, -R)), mod_add(L, R));
    res = mod_mul(mid, LR);
  }
}
void solve() {
  int n;
  cin >> n;
  vector<lld> s(n);
  for (auto &i : s)
    cin >> i;
  dfs(s, sum);
  std::cout << sum << ENDL;
}
int main() {
  //
  solve();
}
*/

// 非void 写法

lld dfs(const vector<lld> s) {
  //
  if (s.size() == 1)
    return s[0] mod MOD_N;

  lld size_ = s.size() / 2;

  if (s.size() % 2 == 0) {
    vector<lld> s1(s.begin(), s.begin() + size_);
    vector<lld> s2(s.begin() + size_, s.end());
    lld L = dfs(s1);
    lld R = dfs(s2);
    return mod_mul(L, R);

  }

  else {
    vector<lld> s1(s.begin(), s.begin() + size_);
    vector<lld> s2(s.begin() + size_ + 1, s.end());
    lld mid = s[size_];
    lld L = dfs(s1);
    lld R = dfs(s2);
    lld LR = mod_mul(std::abs(mod_add(L, -R)), mod_add(L, R));
    return mod_mul(mid, LR);
  }
}
void solve() {
  int n;
  cin >> n;
  vector<lld> s(n);
  for (auto &i : s)
    cin >> i;
  sum = dfs(s);
  std::cout << sum << ENDL;
}
int main() {
  //
  solve();
}